﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;
using Entidades.Sistema.Produccion;
using Mapping.Sistema.Produccion;
using System.Web;

namespace Modelo.Sistema.Produccion
{
    public class CatalogoInsumo
    {
        private List<Insumo> Col_insumos;

        public CatalogoInsumo()
        {
            if (HttpContext.Current != null)
            {
                List<Insumo> insumos = (List<Insumo>)HttpContext.Current.Session["Col_insumos"];
                if (insumos == null)
                {
                    insumos = MappingInsumo.ConsultarInsumos();
                    HttpContext.Current.Session["Col_insumos"] = insumos;
                }
                Col_insumos = insumos;
            }
            else
            {
                Col_insumos = MappingInsumo.ConsultarInsumos();
            }
            
        }

        public bool AgregarInsumo(Insumo oInsumo)
        {
            oInsumo.IdInsumo = GetMayor();
            oInsumo.IdInsumo = oInsumo.IdInsumo + 1;
            Col_insumos.Add(oInsumo);
            Mapping.Sistema.Produccion.MappingInsumo.AgregarInsumo(oInsumo);
            HttpContext.Current.Session["Col_insumos"] = Col_insumos;
            return true;
        }
        public bool EliminarInsumo(Insumo oInsumo)
        {
            Col_insumos.Remove(oInsumo);
            Mapping.Sistema.Produccion.MappingInsumo.EliminarInsumo(oInsumo);
            HttpContext.Current.Session["Col_insumos"] = Col_insumos;
            return true;
        }
        public void ModificarInsumo(Insumo oInsumo)
        {
            Mapping.Sistema.Produccion.MappingInsumo.ModificarInsumo(oInsumo);
            Col_insumos.RemoveAll(x => x.IdInsumo == oInsumo.IdInsumo);
            Col_insumos.Add(oInsumo);
            HttpContext.Current.Session["Col_insumos"] = Col_insumos;
        }

        public ReadOnlyCollection<Insumo> ListarInsumos()
        {
            return Col_insumos.AsReadOnly();
        }
        public Insumo BuscarInsumo(int idinsumo)
        {
            return this.Col_insumos.Find(r => r.IdInsumo == idinsumo);
        }

        public Int32 GetMayor()
        {
            if (Col_insumos.Count == 0) return 0;

            Int32 maxIdInsumo =
                (from ins in Col_insumos
                 select ins.IdInsumo)
                .Max();

            return maxIdInsumo;
        }
    }
}
